// 宏任务微任务
// async + await 执行机制
async function async1() {
  console.log("async1 start"); // 2
  // const res = await axios.get('url')
  // axios.get().then(res => {})
  await async2(); // 立即执行 async2 函数
  console.log("async1 end");
  // async + await 是一个语法糖
  // 对 promise 代码的简写
  // 完整写法如下:
  // async2().then(() => {
  //   console.log("async1 end");
  // })
  // 结论: await 关键字修饰的代码, 从返回值开始到下一行后面的所有代码, 都是放在 .then 回调函数中的代码
  // await 函数调用的返回值就是 .then 第一个回调函数的形参
}

async function async2() {
  console.log("async2");
  // return promise对象
}

console.log("script start"); // 1

setTimeout(function () {
  console.log("setTimeout");
}, 0);

async1();

new Promise(function (resolve) {
  console.log("promise1"); 
  resolve();
}).then(function () {
  console.log("promise2");
});

console.log("script end"); 

// 去银行取钱, 排号
// 当叫号到你了, 这时候去办业务 (宏任务)
// 你需要买点理财产品吗? (微任务)

// 智囊团 1 号
// script start
// async1 start
// script end
// setTimeout
// async2
// async1 end
// promise1
// promise2

// 智囊团 2 号
// script start
// promise1
// script end
// async1 start
// async1 end
// async2
// promise2
// setTimeout

// 智囊团 3 号
// script start
// async1 start
// promise1
// script end
// setTimeout
// async2
// async1 end
// promise2

// 智囊团 4 号
// 1.script start
// 2.as1 start
// 3.promise1
// 4.script end
// 5.as2
// 6.as1 end
// 7.promise 2
// 8.setTimeout

// script start
// async1 start
// async2
// promise1
// script end
// async1 end
// promise2
// setTimeout